package br.com.puc.controllers;

import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.puc.models.SessaoUsuario;
import br.com.puc.models.Usuario;
import br.com.puc.models.annotations.Publico;
import br.com.puc.repositories.UsuarioRepository;
import br.com.puc.utils.BancoUtil;

@Resource
public class UsuarioController {

	private static final String ADMIN = "admin";
	private final Result result;
	private final UsuarioRepository repository;

	private SessaoUsuario sessao;

	public UsuarioController(Result result, UsuarioRepository repository, SessaoUsuario sessao) {
		this.result = result;
		this.repository = repository;
		this.sessao = sessao;
	}

	@Publico
	@Get("/login")
	public Usuario login() {
		return new Usuario();
	}

	@Publico	
	@Post("/usuarios/autenticar")
	public void autenticar(String login, String senha) {
		Usuario usuario = repository.autenticar(login, senha);
		if (usuario != null) {
			sessao.setUsuarioLogado(usuario);
			result.redirectTo(IndexController.class).index();
		} else if (login.equals(ADMIN) && senha.equals(ADMIN) && repository.quantidadeUsuarios() == 0) {
			usuario = new Usuario();
			usuario.setLogin(ADMIN);
			usuario.setSenha(ADMIN);
			repository.create(usuario);
			sessao.setUsuarioLogado(usuario);
			result.redirectTo(IndexController.class).index();			
		} else {
			result.include("error", "Login ou senha incorreta!")
			.redirectTo(this).login();
		}
	}
	
    @Get("/logout")
    public void logout() {
        sessao.logout();
        result.redirectTo(this).login();
    }
}
